// 创建状态管理器
// cnpm i redux -S
// 1.引入状态管理器
import { createStore } from 'redux' // createStore用来创建状态管理器
// 2.定义reducer， - 包含初始化状态以及修改状态
// const reducer = () => {}
// const reducer = (state={a: 1}, action) => {}
const reducer = (state = {
  list: [1, 2, 3]
}, action) => {
  // aciton 会包含两个参数 type payload
  // type 不可以更改  payload 可以更改名字
  // type 代表的是用户操作的某一个行为 --- 发出的指令
  // payload 代表的是参数的key值，你怎么定义怎么使用 ---- 一般建议就使用payload
  const { type, payload } = action
  // 用户可能会发出很多 action --- 针对不同的指令做不同的事情
  switch (type) {
    case "CHANGE_LIST":
      // 因为reducer 必须是一个纯函数，输入一定，输出就一定确定，
      // 必须得返回一个新的对象 --- 新的状态 ---- 深拷贝
      // es6  ---- 对象的合并
      // Object.assign({}, state, { list: payload } )
      // { ...state, list: payload }
      return { ...state, list: payload }
    default:
      return state
  }
}
// 3.创建状态管理器
// 使用 createStore 来创建
// 有且只有一个reducer ---- 保证  单一的数据源
// 并不是说 createStore 只有一个参数
const store = createStore(reducer)

// 4.暴露状态管理器
export default store